# 导入PyTorch库和NumPy库，用于后续的数据处理和张量操作
import operator

import torch
import numpy as np
from torch import neg

# 打印一个整数，用于演示如何创建和打印一个简单的张量
print(10)
# 创建并打印一个包含单个整数的张量
print(torch.tensor(10))

# 分隔符，用于区分不同的数据示例
print('*' * 50)

# 生成一个2x3的随机NumPy数组，并打印出来
data_np = np.random.randn(2, 3)
print(data_np)
# 将NumPy数组转换为张量，并打印出来，展示如何从NumPy数组创建张量
print(torch.tensor(data_np))

# 分隔符，用于区分不同的数据示例
print('*' * 50)

# 一个手动定义的二维列表数据
data = [[10., 20, 30], [20, 30, 40]]
print(data)
# 将二维列表转换为张量，并打印出来，展示如何从嵌套列表创建张量
print(torch.tensor(data))

# 创建0、1和指定值张量
# 1.创建指定形状全1张量
print(torch.ones(2, 3))
# 2.根据张量形状创建全1张量
print(torch.ones_like(torch.tensor(data)))

# 先使用full()创建一个2行3列，指定值为15的张量data，然后再输出
data = torch.full((2, 3), 15)
print(data)

# 将data元素类型转换为double类型
print(data.double())

'''
分别使用zeros()和zeros_like()创建一个2行3列，指定值为0的张量data，然后再输出
'''
data6 = torch.zeros(2, 3)
print(data6)
# data8 = torch.zeros_like(torch.tensor(data6))
# print(data8)

# 在0~10范围内，按照步长2生成元素
print(torch.arange(0, 10, 2))
# 在0~11范围内，生成10个元素
print(torch.linspace(0, 11, 10))

# 点积运算
data1 = torch.tensor([[1, 2], [3, 4], [5, 6]])
data2 = torch.tensor([[5, 6], [7, 8]])

data3 = data1 @ data2
print('data3->', data3)

# neg函数取负操作
print(operator.neg(5))
